1. Field of the Invention
This invention relates to streaming transfer of data between a plurality of devices of a computer system and more particularly to regulating the flow of data between a plurality of devices of a computer system.
2. Description of the Related Art
Streaming generally refers to high-speed bulk data transfers between two devices. Streaming may occur between a peripheral device and a host computer or directly between two peripheral devices.
In some systems, such as data acquisition (DAQ) systems, there may be large quantities of data to be moved around within the system. For example, in a DAQ system, data may be sampled in a digitizer board and streamed to a Field Programmable Gate Array (FPGA) device on a processing card. The output of the processing card may be sent to a signal generation board for output, for instance. Alternatively, data may be retrieved from secondary storage by a host CPU on a host controller and sent to a first-in first-out (FIFO) device of a processing card. In systems where there are large quantities of data, frequent data movements and high bandwidth connections (e.g., PCIe), target devices (e.g., receiving devices) may frequently become full and, when this occurs, data movement may stall, resulting in errors or otherwise impacting system performance.
In some computer systems, a receiving device may be a storage element such as a Random Access Memory (RAM) or a first-in first-out device (FIFO). Typically, devices such as these perform programmed data transfers as fast as reasonably possible and with little consideration of the impact of such transfers on receiving devices or of the impact of such transfers on the wider system. As a result, many issues may occur, especially in systems where large quantities of data are frequently transferred between different elements across shared communication links (e.g., between different expansion cards). For example, data transfers may be stalled due to insufficient storage space at the target location, bus transactions may get backed up, buffers may overrun or underrun, FIFOs may become full, and so forth. In addition, in systems where data is streamed through multiple devices/PCBs issues such as these may, either individually or together, become problematic. In a computer system where there are two streams of data moving through a system interconnect, the presence of one stream (e.g., a backup of transfers) could cause problems for the second stream if the two streams share a portion of the system interconnect. For example, the system interconnect of some systems may include point-to-point communication links coupled to devices and to link switches where two data streams may, for a period of time, share a common communications link (e.g., a link between two switches). In such a situation, the presence of one data stream may have an adverse effect on the second data stream at the shared communications link. Accordingly it is desirable to provide technique that manages the transfer of data between devices of a computer system and is resilient enough to overcome various adverse impacts from other devices in the system, or to avoid those adverse impacts altogether by managing the flow of data between devices in a system.